#ifdef a
//Test one 输出结果？
#include<iostream>
using namespace std;
class A {
public:
	A(const char* s) {
		cout << s << endl;
	}
	
	~A() {}
};

class B :virtual public A 
{
public:
	B(const char* s1, const char* s2)
		:A(s1)
	{ 
		cout << s2 << endl;
	}
};

class C :virtual public A 
{
public:
	C(const char* s1, const char* s2)
		:A(s1) 
	{ 
		cout << s2 << endl;
	}
};

class D :public B, public C
{
public:
	D(const char* s1, const char* s2, const char* s3, const char* s4)
		:B(s1, s2)
		,C(s1, s3)
		,A(s1)
	{
		cout << s4 << endl;
	}
};

int main() {
	D* p = new D("class A", "class B", "class C", "class D");
	delete p;
	return 0;
}
//输出结果：class A		class B		 class C	   class D
/*
		在第一次构造完A类部分后，发现之后C类和子类D即便显性调用了A的构造函数，依然不会再次执行A部分的构造，这是为什么呢？
			自己的瞎理解：是因为执行函数时会传入一个指示变变量之类的东西，当调用完一次之后，以后碰到时传入0，不执行。
*/

#endif